//package com.infra.server.config;
//
//import org.apache.http.HttpHost;
//import org.apache.http.auth.AuthScope;
//import org.apache.http.auth.UsernamePasswordCredentials;
//import org.apache.http.client.CredentialsProvider;
//import org.apache.http.impl.client.BasicCredentialsProvider;
//import org.elasticsearch.client.RestClient;
//import org.elasticsearch.client.RestClientBuilder;
//import org.elasticsearch.client.RestHighLevelClient;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//
//import java.util.ArrayList;
//import java.util.List;
//
///**
// * @author win
// * @date 2021/9/9 16:24
// */
//@Configuration
//public class EsConfig {
//
//    /** 协议 */
//    @Value("${elasticsearch.schema:http}")
//    private String schema;
//
//    /** 集群地址，如果有多个用“,”隔开 */
//    private String address = "localhost:9200";
//    private String username = "elastic";
//    private String password = "elastic";
//
//    /** 连接超时时间 */
//    @Value("${elasticsearch.connectTimeout:5000}")
//    private int connectTimeout;
//
//    /** Socket 连接超时时间 */
//    @Value("${elasticsearch.socketTimeout:10000}")
//    private int socketTimeout;
//
//    /** 获取连接的超时时间 */
//    @Value("${elasticsearch.connectionRequestTimeout:5000}")
//    private int connectionRequestTimeout;
//
//    /** 最大连接数 */
//    @Value("${elasticsearch.maxConnectNum:100}")
//    private int maxConnectNum;
//
//    /** 最大路由连接数 */
//    @Value("${elasticsearch.maxConnectPerRoute:100}")
//    private int maxConnectPerRoute;
//
//    @Bean("client")
//    public RestHighLevelClient restHighLevelClient() {
//        // 拆分地址
//        List<HttpHost> hostLists = new ArrayList<>();
//        String[] hostList = address.split(",");
//        for (String addr : hostList) {
//            String host = addr.split(":")[0];
//            String port = addr.split(":")[1];
//            hostLists.add(new HttpHost(host, Integer.parseInt(port), schema));
//        }
//        // 转换成 HttpHost 数组
//        HttpHost[] httpHost = hostLists.toArray(new HttpHost[]{});
//
//        // 用户认证对象
//        final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
//        // 设置用户密码
//        credentialsProvider.setCredentials(AuthScope.ANY,new UsernamePasswordCredentials(username,password));
//
//        // 构建连接对象
//        RestClientBuilder builder = RestClient.builder(httpHost);
//        // 异步连接延时配置
//        builder.setRequestConfigCallback(requestConfigBuilder -> requestConfigBuilder
//                .setConnectionRequestTimeout(connectionRequestTimeout)
//                .setSocketTimeout(socketTimeout)
//                .setConnectTimeout(connectTimeout))
//                .setHttpClientConfigCallback(httpAsyncClientBuilder -> httpAsyncClientBuilder
//                        .setMaxConnTotal(maxConnectNum)
//                        .setMaxConnPerRoute(maxConnectPerRoute)
//                        .setDefaultCredentialsProvider(credentialsProvider));
//
//        return new RestHighLevelClient(builder);
//    }
//
//
//}
